/*
 * 
 * LegendShop 多用户商城系统
 * 
 *  版权所有,并保留所有权利。
 * 
 */
package com.legendshop.oa.dao;

import com.legendshop.dao.Dao;
import com.legendshop.dao.support.CriteriaQuery;
import com.legendshop.dao.support.PageSupport;
import com.legendshop.oa.dto.DailyLogQueryDto;
import com.legendshop.oa.dto.UserOverProjectTimeInputDto;
import com.legendshop.oa.model.TaskEstimate;

import java.util.Date;
import java.util.List;

/**
 * The Class TaskEstimateDao. 任务时间估计Dao接口
 */
public interface TaskEstimateDao extends Dao<TaskEstimate, Long> {
	/**
	 * 根据商城获取任务时间估计列表
	 */
	public abstract List<TaskEstimate> getTaskEstimate(String shopName);

	/**
	 * 根据Id获取任务时间估计
	 */
	public abstract TaskEstimate getTaskEstimate(Long id);
	
	/**
	 * 根据Id获取任务时间估计,没有reviewed过的才可以删除
	 */
	public TaskEstimate getUnReviewedTaskEstimate(Long taskEstimateId);

	/**
	 * 删除任务时间估计
	 */
	public abstract int deleteTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 保存任务时间估计
	 */
	public abstract Long saveTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 更新任务时间估计
	 */
	public abstract int updateTaskEstimate(TaskEstimate taskEstimate);

	/**
	 * 查询任务时间估计列表
	 */
	public abstract PageSupport getTaskEstimate(CriteriaQuery cq);

	public abstract List<TaskEstimate> getTaskEstimateByTask(Long taskId);

	public abstract void saveTaskEstimate(List<TaskEstimate> entities);

	public abstract void deleteTaskEstimateByTask(Long id);

	public abstract List<TaskEstimate> getReviewedTaskEstimateByTask(Long id);

	public abstract List<TaskEstimate> getTaskEstimateByDay(Date date, String userName);

	public abstract PageSupport<TaskEstimate> getTaskEstimateByDay(Date startDate, Date endDate, DailyLogQueryDto dailyLogQueryDto);

	public abstract PageSupport<TaskEstimate> getTaskEstimateByTask(Long taskId, String curPageNO);

	public abstract PageSupport<TaskEstimate> getTaskEstimateByDay(Date date1, String userName1, String curPageNO);
	
	/**
	 * 加载用户在一段时间的工时
	 */
	public abstract Long getTaskEstimateHoursByUser( String userName, Date startDate, Date endDate);
	
	/**
	 *  审核某个用户在一周或者一个月的工时的状态
	 */
	public Integer updateTaskEstimateHoursByUser(String userName, Date startDate, Date endDate);

	/**
	 *  用户是否在一个项目填写了超过规定的时长，如果返回结果不为空，则表示超标了
	 */
	public List<UserOverProjectTimeInputDto> isUserOverProjectTimeInput(String userName, Date startDate, Date endDate);

}
